// 以后store文件夹里面index文件，就是与vuex仓库相关的文件!!!
import Vue from 'vue'

//引入vuex插件,vuex插件对外暴露是一个对象【插件对象:install方法】
import Vuex from 'vuex'

// 使用插件
Vue.use(Vuex)

// 创建自己的仓库
// Vuex插件对象，身上有一个Store方法。它是一个构造函数。执行会返回一个Store类的一个实例【仓库】
let store = new Vuex.Store({
    // 存储数据的地方
    state:{
        count:1,
        hobby:['吃饭','睡觉','打豆豆']
    },
    // 唯一可以修改state里面的数据的地方
    mutations:{
        ADD(state){
            state.count++;
        },
        MINUS(state){
            state.count--;
        },
        ADDNINE(state,payload){
            state.count += payload;
        },
        UPDATECOUNT(state,payload){
            state.count = payload;
        }

    },
    // 书写业务逻辑 比如if,异步语句等   不能直接修改数据
    actions:{
        add({commit,state,dispatch}){
           commit('ADD')
        },
        minus({commit,state,dispatch}){
            commit('MINUS')
        },
        evenAdd({commit,state,dispatch}){
            if(state.count % 2==0){
                commit('ADD');
            }else{
                console.log('不是偶数')
            }
        },
        evenMinus({commit,state,dispatch}){
            if(state.count % 2 !== 0){
                commit('MINUS')
            }else{
                console.log('不是奇数')
            }
        },
        addNine({commit,state,dispatch},payload){
            commit('ADDNINE',payload)
        },
        addTime({commit,state,dispatch}){
            setTimeout(() => {
                commit('ADD')
            }, 2000);
        },
        updateCount({commit,state,dispatch},payload){
            commit('UPDATECOUNT',payload)
        }


    },
    getters:{
        total(state){
            return state.hobby.reduce((a,b)=>a+b,0)
        }
    }
})


// 对外暴露仓库
// 暴露的仓库实质即为Store类的一个实例而已
export default store;